package org.example.sort;

import java.io.*;

/**
 * 假设虚拟机参数为xms1g xmx1g
 * int类型为4个字节，那么2亿个数字就是8亿字节，也就是8*10^9 byte=8*10^3 m = 8gb
 * 如果直接排序会直接爆出oom的
 * 所以，我们需要先把这8gb分成16个子文件
 *
 */
public class ReFileNums {
    public static void main(String[] args) throws IOException {

        File file = new File("num.txt");
        FileReader fileReader = new FileReader(file);
        FileWriter[] fileWriters = new FileWriter[16];
        for(int i=0;i<16;i++){
            File file1 =new File("nums/num"+i+".txt");
            fileWriters[i] = new FileWriter(file1);
        }
        try {
            int num=0;
            while ((num=fileReader.read())!=-1){
                int h =Integer.valueOf(num).hashCode()%16;
                fileWriters[h].write(num);
            }
        }finally {
            fileReader.close();
            for(int i=0;i<16;i++){
                fileWriters[i].close();
            }
        }
    }
}
